www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/game_Source/savegame.cpp
//Download by http://www.NewXing.com #include <ddraw.h> #include "main.h" #include "SaveGame.h" #include "newgame.h" #include "gamelib\\dialog\\dialog.h" void CALLBACK SaveGameTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime); void SaveGameRefreshScreen(); void JudgeMousePlace_save( ); void DrawGameInfo(int i); void ShowGameInfo(int i); void SaveGameInfo(int i); RLEBITHEADER * SaveGameRLE; RLEBITHEADER * selete_SaveRLE; RLEBITHEADER * unselete_SaveRLE; RLEBITHEADER * scrollRLE; GameSave * gameOldSaved[4]; BMPHEADER * gameImage[4]; int iScroll; int id_game; int iCurrentStartN; //当前开始的存档号 bool SaveGameSelect = false; int SaveGameSelectNum = 0; int SaveGame_func() { MSG msg; SaveGameSelect = false; SaveGameRLE = LoadRleImage("pic\\dialog\\dialog.ret"); selete_SaveRLE = LoadRleImage("pic\\dialog\\select_save.ret"); unselete_SaveRLE = LoadRleImage("pic\\dialog\\unselect_save.ret"); scrollRLE = LoadRleImage("pic\\dialog\\scroll.ret"); int i; iScroll= 0; iCurrentStartN = 0; for(i = 0; i < 4; i++) { gameOldSaved[i] = NULL; DrawGameInfo(i); } long lW, lH; //显示对话框 lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; ShowRleImage_NR(lW, lH, 0, 0, SaveGameRLE, pS[SBuffer], SP[SBuffer]); //显示档案记录 ShowRleImage_NR(lW+26, lH+26, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+139, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+252, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+365, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); //存储当前图形 rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); FastBlt(0, 0, rect1, pS[SBack], pS[SBuffer], SP[SBack], SP[SBuffer], false, 0); cursor = 0; PA_SAFE_DELETE(mouseRLE); mouseRLE = LoadRleImage("Pic\\cursor\\cursor01.ret"); cursorT = 4; SetTimer(hwnd, 1, 50, SaveGameTimer); while(!SaveGameSelect) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if ( msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { SaveGameRefreshScreen( ); } } KillTimer(hwnd, 1); PA_SAFE_DELETE(SaveGameRLE); PA_SAFE_DELETE(selete_SaveRLE); PA_SAFE_DELETE(unselete_SaveRLE); PA_SAFE_DELETE(scrollRLE); for(i = 0; i < 4; i++) { P_SAFE_DELETE(gameOldSaved[i]); PA_SAFE_DELETE(gameImage[i]); } return SaveGameSelectNum; } LRESULT WINAPI SaveGameMessageProc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam) { switch(message) { case WM_SETCURSOR: SetCursor(NULL); break; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: SaveGameSelectNum = 0; SaveGameSelect = true; break; default: return 1; } break; case WM_LBUTTONDOWN: curpos.x = LOWORD (lParam); curpos.y = HIWORD (lParam); JudgeMousePlace_save( ); switch(id_game) { case 0x01: case 0x02: case 0x03: case 0x04: SaveGameInfo(id_game-1); break; case 0x101: if(iScroll >0) { iScroll --; } break; case 0x102: if(iScroll < 16) { iScroll ++; } break; } break; case WM_MOUSEMOVE: curpos.x = LOWORD (lParam); curpos.y = HIWORD (lParam); if(curpos.x > SCREEN_WIDTH - 1 ) { curpos.x = SCREEN_WIDTH-1; SetCursorPos(curpos.x, curpos.y); } if(curpos.y > SCREEN_HEIGHT - 1) { curpos.y = SCREEN_HEIGHT-1; SetCursorPos(curpos.x, curpos.y); } JudgeMousePlace_save( ); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 1; } void SaveGameRefreshScreen() { long lW, lH; lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); FastBlt(0, 0, rect1, pS[SBuffer], pS[SBack], SP[SBuffer], SP[SBack], false, 0); switch(id_game) { case 0x01: //当鼠标当前第一个存档时 ShowRleImage_NR(lW+26, lH+26, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; case 0x02: //当鼠标当前第二个存档时 ShowRleImage_NR(lW+26, lH+139, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; case 0x03: //当鼠标当前第三个存档时 ShowRleImage_NR(lW+26, lH+252, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; case 0x04: //当鼠标当前第四个存档时 ShowRleImage_NR(lW+26, lH+365, 0, 0, selete_SaveRLE, pS[SBuffer], SP[SBuffer]); break; } //显示存档信息 int i; if(iCurrentStartN != iScroll) { if(iCurrentStartN > iScroll) { switch(iCurrentStartN - iScroll) { case 1: PA_SAFE_DELETE(gameOldSaved[3]); P_SAFE_DELETE(gameImage[3]); gameOldSaved[3] = gameOldSaved[2]; gameImage[3] = gameImage[2]; gameOldSaved[2] = gameOldSaved[1]; gameImage[2] = gameImage[1]; gameOldSaved[1] = gameOldSaved[0]; gameImage[1] = gameImage[0]; gameOldSaved[0] = NULL; gameImage[0] = NULL; DrawGameInfo(0); break; case 2: P_SAFE_DELETE(gameOldSaved[3]); PA_SAFE_DELETE(gameImage[3]); P_SAFE_DELETE(gameOldSaved[2]); PA_SAFE_DELETE(gameImage[2]); gameOldSaved[3] = gameOldSaved[1]; gameImage[3] = gameImage[1]; gameOldSaved[2] = gameOldSaved[0]; gameImage[2] = gameImage[0]; gameOldSaved[1] = NULL; gameImage[1] = NULL; gameOldSaved[0] = NULL; gameImage[0] = NULL; DrawGameInfo(0); DrawGameInfo(1); break; case 3: P_SAFE_DELETE(gameOldSaved[3]); PA_SAFE_DELETE(gameImage[3]); P_SAFE_DELETE(gameOldSaved[2]); PA_SAFE_DELETE(gameImage[2]); P_SAFE_DELETE(gameOldSaved[1]); PA_SAFE_DELETE(gameImage[1]); gameOldSaved[3] = gameOldSaved[0]; gameImage[3] = gameImage[0]; gameOldSaved[0] = NULL; gameImage[0] = NULL; gameOldSaved[1] = NULL; gameImage[1] = NULL; gameOldSaved[2] = NULL; gameImage[2] = NULL; DrawGameInfo(0); DrawGameInfo(1); DrawGameInfo(2); break; default: for(i = 0; i < 4; i++) { DrawGameInfo(i); } break; } } else { switch(iScroll - iCurrentStartN) { case 1: P_SAFE_DELETE(gameOldSaved[0]); PA_SAFE_DELETE(gameImage[0]); gameOldSaved[0] = gameOldSaved[1]; gameImage[0] = gameImage[1]; gameOldSaved[1] = gameOldSaved[2]; gameImage[1] = gameImage[2]; gameOldSaved[2] = gameOldSaved[3]; gameImage[2] = gameImage[3]; gameOldSaved[3] = NULL; gameImage[3] = NULL; DrawGameInfo(3); break; case 2: P_SAFE_DELETE(gameOldSaved[0]); PA_SAFE_DELETE(gameImage[0]); P_SAFE_DELETE(gameOldSaved[1]); PA_SAFE_DELETE(gameImage[1]); gameOldSaved[0] = gameOldSaved[2]; gameImage[0] = gameImage[2]; gameOldSaved[1] = gameOldSaved[3]; gameImage[1] = gameImage[3]; gameOldSaved[2] = NULL; gameImage[2] = NULL; gameOldSaved[3] = NULL; gameImage[3] = NULL; DrawGameInfo(2); DrawGameInfo(3); break; case 3: P_SAFE_DELETE(gameOldSaved[0]); PA_SAFE_DELETE(gameImage[0]); P_SAFE_DELETE(gameOldSaved[1]); PA_SAFE_DELETE(gameImage[1]); P_SAFE_DELETE(gameOldSaved[2]); PA_SAFE_DELETE(gameImage[2]); gameOldSaved[0] = gameOldSaved[3]; gameImage[0] = gameImage[3]; gameOldSaved[1] = NULL; gameImage[1] = NULL; gameOldSaved[2] = NULL; gameImage[2] = NULL; gameOldSaved[3] = NULL; gameImage[3] = NULL; DrawGameInfo(1); DrawGameInfo(2); DrawGameInfo(3); break; default: for(i = 0; i < 4; i++) { DrawGameInfo(i); } break; } } iCurrentStartN = iScroll; } for(i = 0; i < 4; i++) { ShowGameInfo(i); } //显示滚动箭头 if(iScroll != 0) { if(id_game != 0x101) ShowRleImage_NR(lW+555, lH+180, 0, 0, scrollRLE, pS[SBuffer], SP[SBuffer]); else ShowRleImage_NR(lW+555, lH+180, 1, 0, scrollRLE, pS[SBuffer], SP[SBuffer]); } if(iScroll != 16) { if(id_game != 0x102) ShowRleImage_NR(lW+555, lH+259, 0, 1, scrollRLE, pS[SBuffer], SP[SBuffer]); else ShowRleImage_NR(lW+555, lH+259, 1, 1, scrollRLE, pS[SBuffer], SP[SBuffer]); } //显示鼠标 lW = mouseRLE->bfWidth/mouseRLE->bfWidthBitN; lH = mouseRLE->bfHeight/mouseRLE->bfHeightBitN; RECT rect3; rect3.left = 0; rect3.top = 0; rect3.right = curpos.x+lW > SCREEN_WIDTH?SCREEN_WIDTH-curpos.x:lW; rect3.bottom = curpos.y+lH > SCREEN_HEIGHT?SCREEN_HEIGHT-curpos.y:lH; ShowRleImage(curpos.x, curpos.y, cursor, 0, rect3, mouseRLE, pS[SBuffer], SP[SBuffer]); UpdateScreen(); } void CALLBACK SaveGameTimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) { } void JudgeMousePlace_save( ) { long lW, lH; id_game = 0; lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; if((curpos.x > lW+26)&&(curpos.x < lW+530)) { if((curpos.y > lH+26)&&(curpos.y < lH+134)) id_game |= 0x01; else if((curpos.y > lH+139)&&(curpos.y < lH+247)) id_game |= 0x02; else if((curpos.y > lH+252)&&(curpos.y < lH+360)) id_game |= 0x03; else if((curpos.y > lH+365)&&(curpos.y < lH+473)) id_game |= 0x04; } if((curpos.x > lW+555)&&(curpos.x < lW+573)) { if((curpos.y > lH+180)&&(curpos.y < lH+197)) id_game |= 0x101; else if((curpos.y > lH+259)&&(curpos.y < lH+276)) id_game |= 0x102; } } void DrawGameInfo(int i) { int iN = i+iScroll; char filename[10]; char pstrFileName[MAX_PATH]; GetCurrentDirectory(MAX_PATH,pstrFileName); strcat(pstrFileName, "\\save\\"); itoa(iN, filename, 10); strcat(pstrFileName, filename); strcat(pstrFileName, ".info"); FILE *file=fopen(pstrFileName,"rb"); if(!file) { return; } if(gameOldSaved[i]) { P_SAFE_DELETE(gameOldSaved[i]); PA_SAFE_DELETE(gameImage[i]); } gameOldSaved[i] = new GameSave; gameOldSaved[i]->GameRole = new ROLE; gameImage[i] = (BMPHEADER * )new WORD[SW[SGameImage]*SH[SGameImage]+sizeof(BMPHEADER)/sizeof(WORD)]; fread(&gameOldSaved[i]->GameHeader, sizeof(GameSaveHeader), 1, file); fread(gameImage[i], SW[SGameImage]*SH[SGameImage]*sizeof(WORD)+sizeof(BMPHEADER), 1, file); fread(gameOldSaved[i]->GameRole , sizeof(ROLE), 1, file); fclose(file); } void ShowGameInfo(int i) { long lW, lH; HDC hdc; CFont cFont; char info[255]; char info1[10]; lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; DDS[SBuffer]->GetDC(&hdc); cFont.UseFont(hdc,DCF_USERDEFINE, 16, 800); wsprintf(info,"%3d",i+iScroll); ShowText(hdc, lW+35, lH+35+(i<<7)+i-(i<<4), RGB(255,0,0), info); if(gameOldSaved[i] == NULL) { cFont.RestoreFont(hdc); DDS[SBuffer]->ReleaseDC(hdc); return; } cFont.RestoreFont(hdc); cFont.UseFont(hdc,DCF_USERDEFINE, 12); wsprintf(info,"%4d年%2d月%2d日%2d时%2d分%2d秒",gameOldSaved[i]->GameHeader.time.wYear, gameOldSaved[i]->GameHeader.time.wMonth, gameOldSaved[i]->GameHeader.time.wDay, gameOldSaved[i]->GameHeader.time.wHour, gameOldSaved[i]->GameHeader.time.wMinute, gameOldSaved[i]->GameHeader.time.wSecond); ShowText(hdc, lW+350, lH+38+(i<<7)+i-(i<<4), RGB(255,255,255), info); strcpy(info, "等级: "); wsprintf(info1,"%4d",gameOldSaved[i]->GameRole->level); strcat(info, info1); ShowText(hdc, lW+180, lH+38+(i<<7)+i-(i<<4), RGB(0,255,255), info); strcpy(info, "生命:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->health); strcat(info, info1); strcat(info, " / "); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->MaxHealth); strcat(info, info1); strcat(info, " 内力:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->energy); strcat(info, info1); strcat(info, " / "); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->MaxEnergy); strcat(info, info1); strcat(info, " 精力:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->vigor); strcat(info, info1); strcat(info, " / "); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->MaxVigor); strcat(info, info1); ShowText(hdc, lW+180, lH+56+(i<<7)+i-(i<<4), RGB(255,0,0), info); strcpy(info, "攻击力:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->attack); strcat(info, info1); strcat(info, " 攻击速度:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->v); strcat(info, info1); strcat(info, " 防御力:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->defend); strcat(info, info1); strcat(info, " 行走速度:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->speed); strcat(info, info1); ShowText(hdc, lW+180, lH+74+(i<<7)+i-(i<<4), RGB(128,0,128), info); strcpy(info, "敏 捷:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->agility); strcat(info, info1); strcat(info, " 实战经验: "); wsprintf(info1,"%8ld",gameOldSaved[i]->GameRole->experiment); strcat(info, info1); ShowText(hdc, lW+180, lH+92+(i<<7)+i-(i<<4), RGB(0,0,255), info); strcpy(info, "名 望:"); wsprintf(info1,"%3d",gameOldSaved[i]->GameRole->reputation); strcat(info, info1); strcat(info, " 升级经验: "); wsprintf(info1,"%8ld",gameOldSaved[i]->GameRole->MaxExperiment); strcat(info, info1); ShowText(hdc, lW+180, lH+110+(i<<7)+i-(i<<4), RGB(0,196,196), info); cFont.RestoreFont(hdc); DDS[SBuffer]->ReleaseDC(hdc); RECT rect1 = {0, 0, gameImage[i]->bfWidth, gameImage[i]->bfHeight}; ShowBMPImage(lW+70, lH+40+(i<<7)+i-(i<<4), rect1, gameImage[i], pS[SBuffer], SP[SBuffer], false); } void SaveGameInfo(int i) { if(gameOldSaved[i]) { int iReturn; KillTimer(hwnd, 1); gWPPStack.Push(lpWndProc); lpWndProc = DialogMessageProc; rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); GraySurface(rect1); FastBlt(0, 0, rect1, pS[SBack], pS[SBuffer], SP[SBack], SP[SBuffer], false, 0); iReturn = Dialog_func("是否替换当前存档?"); gWPPStack.Pop(lpWndProc); cursor = 0; PA_SAFE_DELETE(mouseRLE); mouseRLE = LoadRleImage("Pic\\cursor\\cursor01.ret"); cursorT = 4; long lW, lH; //显示对话框 lW = (SCREEN_WIDTH-SaveGameRLE->bfWidth)>>1; lH = (SCREEN_HEIGHT-SaveGameRLE->bfHeight)>>1; ShowRleImage_NR(lW, lH, 0, 0, SaveGameRLE, pS[SBuffer], SP[SBuffer]); //显示档案记录 ShowRleImage_NR(lW+26, lH+26, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+139, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+252, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); ShowRleImage_NR(lW+26, lH+365, 0, 0, unselete_SaveRLE, pS[SBuffer], SP[SBuffer]); //存储当前图形 rect1 = MakeRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); FastBlt(0, 0, rect1, pS[SBack], pS[SBuffer], SP[SBack], SP[SBuffer], false, 0); if(iReturn == 2) { return; } P_SAFE_DELETE(gameOldSaved[i]); PA_SAFE_DELETE(gameImage[i]); } gameOldSaved[i] = new GameSave; gameOldSaved[i]->GameRole = new ROLE; gameImage[i] = (BMPHEADER * )new WORD[SW[SGameImage]*SH[SGameImage]+sizeof(BMPHEADER)/sizeof(WORD)]; GetLocalTime(&gameOldSaved[i]->GameHeader.time); gameOldSaved[i]->GameHeader.id = i+iScroll; gameOldSaved[i]->GameHeader.nVersion = VERSION; gameOldSaved[i]->GameRole->LoadFromRole(role); gameImage[i][0].bfBitCount = 565; gameImage[i][0].bfColorKey = 0; gameImage[i][0].bfHeight = (WORD)(SH[SGameImage]); gameImage[i][0].bfType = * (WORD *)"CB"; gameImage[i][0].bfSize = (SW[SGameImage]*SH[SGameImage])<<1; gameImage[i][0].bfWidth = (WORD)(SW[SGameImage]); BOOL bSuccess ; DWORD dwBytesWritten ; HANDLE hFile ; char filename[10]; char pstrFileName[MAX_PATH]; GetCurrentDirectory(MAX_PATH,pstrFileName); strcat(pstrFileName, "\\save\\"); itoa(i+iScroll, filename, 10); strcat(pstrFileName, filename); strcat(pstrFileName, ".info"); hFile = CreateFile (pstrFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ; if (hFile == INVALID_HANDLE_VALUE) return; bSuccess = WriteFile (hFile, &gameOldSaved[i]->GameHeader, sizeof(GameSaveHeader), &dwBytesWritten, NULL) ; if (!bSuccess || (dwBytesWritten != sizeof(GameSaveHeader))) { DeleteFile (pstrFileName) ; return; } RECT drect; drect = MakeRect(0, 0, SW[SGameImage], SH[SGameImage]); FastBlt(0, 0, drect, (DWORD *)&gameImage[i][1], pS[SGameImage], SP[SGameImage], SP[SGameImage], false, 0); bSuccess = WriteFile (hFile, gameImage[i], SW[SGameImage]*SH[SGameImage]*sizeof(WORD)+sizeof(BMPHEADER), &dwBytesWritten, NULL) ; if (!bSuccess || (dwBytesWritten != SW[SGameImage]*SH[SGameImage]*sizeof(WORD)+sizeof(BMPHEADER))) { DeleteFile (pstrFileName) ; return; } WriteFile (hFile, gameOldSaved[i]->GameRole, sizeof(ROLE), &dwBytesWritten, NULL) ; CloseHandle (hFile) ; GetCurrentDirectory(MAX_PATH,pstrFileName); strcat(pstrFileName, "\\save\\"); itoa(i+iScroll, filename, 10); strcat(pstrFileName, filename); strcat(pstrFileName, ".save"); hFile = CreateFile (pstrFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ; if (hFile == INVALID_HANDLE_VALUE) return; WriteFile (hFile, &MainScript, sizeof(CScript), &dwBytesWritten, NULL) ; for(i = 0; i < 10; i++) { bSuccess = WriteFile (hFile, &Script_Child[i], sizeof(CScript), &dwBytesWritten, NULL) ; if (!bSuccess || (dwBytesWritten != sizeof(CScript))) { DeleteFile (pstrFileName); return; } } WriteFile (hFile, Map->cMapName, MAX_PATH*sizeof(char), &dwBytesWritten, NULL) ; for(i = 0; i < 9; i++) { WriteFile (hFile, Map_Child[i].cMapName, MAX_PATH*sizeof(char), &dwBytesWritten, NULL) ; } int * iLink = new int[Zoetic->ZoeticHeader.nMagicN]; _ZoeticLink * ZoeticLink = Zoetic->ZoeticLinkHeader; for(i = 0; i < (int)Zoetic->ZoeticHeader.nMagicN; i++) { if(ZoeticLink == NULL) { iLink[i] = 0xffff; break; } iLink[i] = ZoeticLink->dI; ZoeticLink = ZoeticLink->Next; } bSuccess = WriteFile (hFile, &Zoetic->ZoeticHeader, sizeof(_ZoeticHeader), &dwBytesWritten, NULL) ; bSuccess = WriteFile (hFile, Zoetic->MainStatus, Zoetic->ZoeticHeader.nMagicN*sizeof(int), &dwBytesWritten, NULL) ; bSuccess = WriteFile (hFile, iLink, Zoetic->ZoeticHeader.nMagicN*sizeof(int), &dwBytesWritten, NULL) ; for(i = 0; i < (int)Zoetic->ZoeticHeader.nMagicN; i++) { bSuccess = WriteFile (hFile, &(Zoetic->ZoeticLink[i]), sizeof(_ZoeticLink), &dwBytesWritten, NULL) ; if (!bSuccess || (dwBytesWritten != sizeof(_ZoeticLink))) { DeleteFile (pstrFileName) ; return; } } P_SAFE_DELETE(iLink); CloseHandle (hFile) ; return ; }